
public class A56 {
       public static void main(String[] args){
           //我想要在这个main方法里调用method方法
           /*方法一:自己创建一个动物对象,但这个动物对象是抽象类,不能直接实例化
             所以在创建这个动物对象的子类,并实现抽象方法,再创建这个子类的对象,这个对象作为method方法参数,就可以调用method方法
           */
           Dog dog = new Dog();
           method(dog);
           //但是上面这个方法有一个弊端,就是这个Dog类只用到一次,太麻烦了,没必要
           /*方法二:使用匿名内部类*/
           method(
                   new Animal(){
                       @Override
                       public void eat() {
                           System.out.println("我是一个动物,我在吃");
                       }
                   }
           );

           //拓展:
           //整体可以理解为Swim接口的实现类对象
           //接口多态
           Swim swim = new Swim(){
               @Override
               public void swim(){
                   System.out.println("我正在游泳");
               }
           };
           //编译看左边,运行看右边
           //左边是Swim接口,右边是Swim接口的实现类对象
           //所以可以调用swim方法
           swim.swim();
           //也可以直接这样调用
           new Swim(){
               @Override
               public void swim(){
                   System.out.println("我正在游泳2");
               }
           }.swim();

       }
       public static void method(Animal animal){
           animal.eat();
       }
}
abstract class Animal {
    public abstract void eat();
}
class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃骨头");
    }
}
interface Swim{
    public abstract void swim();
}